import random
import tensorflow as tf
# from d2l import tensorflow as d2l

"""
代码生成训练集，结果集，
生成带有噪声的数据集
y = w1x1+w2x2+b+c c是高斯噪声
"""


def data_sources(w, b, number):
    """
    代码定义了一个名为 data_sources 的函数，它接受三个参数：w，b 和 number。函数的目的是生成一个数据集。

首先，它创建了一个形状为 (number, w.shape[0]) 的零向量 X。然后，它在 X 上添加随机噪声，使其成为一个随机数据集。

接下来，它使用 w 和 b 计算出每个数据点的标签 y。具体来说，它使用矩阵乘法计算 X 和 w 的乘积，并将结果加上偏置项 b。然后，它在 y 上添加一些随机噪声。

最后，它将 y 重塑为一个列向量，并将其与 X 一起返回。

这段代码的目的是生成一个带有噪声的线性数据集，可以用于测试线性回归模型。
    """
    X = tf.zeros((number, w.shape[0]))  # 定义一个number行，w列的0向量
    # print(X, '0向量为：{X},型状{X.shape}')
    X += tf.random.normal(shape=X.shape)  # 创建和X一样形状的随机数
    # print(X, '随机添加数据集：{X.shape}')

    y = tf.matmul(X, tf.reshape(w, (-1, 1))) + b  # y =w1x1+w2x2+b
    # print(y, 'y的形状{y.shape}')
    y += tf.random.normal(shape=y.shape, stddev=0.01)
    y = tf.reshape(y, (-1, 1))
    # print(y, 'y转换后的形状{y.shape}')
    return X, y


# 真实数据的权重和参数
true_w = tf.constant([2, -3.4])  # 1行俩列
true_b = 4.2
# 生成1000个样本的数据集
sample, labels = data_sources(true_w, true_b, 1000)






